import { defineStore } from 'pinia';
import { Add, removeItems as removeItemsApi } from '@/api/Message';
import { addLog } from '@/api/log'; // <--- 1. 导入日志API

export const useMessageStore = defineStore('message', {
  state: () => ({
    // ... 你的 state
  }),
  actions: {
    // 2. 修改 addItem action
    async addItem(data) {
      try {
        const response = await Add(data);
        if (response.code === 1) { // 假设 code=1 代表成功
          // --- 开始记录日志 ---
          const logData = {
            userId: data.senderUserId, // 管理员ID
            userName: '管理员', // 你可以从用户信息store获取真实姓名
            module: '消息发送中心',
            actionType: data.messageChild.template ? '发送模板消息' : '发送普通消息',
            actionName: data.title, // 操作名称就是消息标题
            status: '成功'
          };
          await addLog(logData);
          // --- 日志记录结束 ---
        }
        return response;
      } catch (err) {
        // --- 开始记录失败日志 ---
        const logData = {
          userId: data.senderUserId,
          userName: '管理员',
          module: '消息发送中心',
          actionType: data.messageChild.template ? '发送模板消息' : '发送普通消息',
          actionName: data.title,
          status: '失败'
        };
        // 注意：即使业务失败，我们仍然尝试记录日志。
        // 用.catch忽略日志记录本身的失败，不影响主流程的错误抛出。
        addLog(logData).catch(logErr => console.error('记录失败日志时出错:', logErr));
        // --- 日志记录结束 ---
        throw err; // 仍然抛出原始错误，让上层知道业务失败了
      }
    },

    // 3. 修改/新增 removeItem action
    async removeItem(itemIds) {
      // 为了记录日志，我们需要被删除消息的标题
      // 我们从当前 state 的 list 中找到这些消息
      const itemsToRemove = this.list.filter(item => itemIds.includes(item.id));
      if (itemsToRemove.length === 0) return; // 如果找不到要删除的项，直接返回

      try {
        await removeItemsApi(itemIds); // 调用后端的删除接口
        // 更新前端列表
        const validIds = new Set(itemIds);
        this.list = this.list.filter(item => !validIds.has(item.id));

        // --- 开始记录日志 (可以为每条删除都记录，或合并为一条) ---
        // 这里我们为每条记录都创建一个日志
        for (const item of itemsToRemove) {
          const logData = {
            userId: 10000001, // 假设当前用户ID
            userName: '管理员',
            module: '消息发送中心',
            actionType: '删除信息',
            actionName: `删除了消息: "${item.title}"`,
            status: '成功'
          };
          await addLog(logData);
        }
        // --- 日志记录结束 ---

      } catch (err) {
         // --- 开始记录失败日志 ---
        const failedActionName = `尝试删除 ${itemsToRemove.length} 条消息 (例如: "${itemsToRemove[0].title}")`;
        const logData = {
            userId: 10000001,
            userName: '管理员',
            module: '消息发送中心',
            actionType: '删除信息',
            actionName: failedActionName,
            status: '失败'
        };
        addLog(logData).catch(logErr => console.error('记录失败日志时出错:', logErr));
        // --- 日志记录结束 ---
        throw err;
      }
    },
  }
});
